package models

import (
	"errors"
	"fmt"
	"time"
)

func UserLogin(username, password string) (User, error) {
	var u User
	res := Db.Table("user").Where("username = ?", username).First(&u)
	if res.Error != nil {
		fmt.Println(res.Error)
		return User{}, errors.New("用户不存在，请先注册！！！")
	}
	if u.Password != password {
		return User{}, errors.New("密码不正确！！！")
	}
	return u, nil
}

func GetFile(id string) ([]File, error) {
	var f []File
	if err := Db.Table("file").Where("user_id =?", id).Find(&f).Error; err != nil {
		return nil, err
	}
	return f, nil
}

func GetFileAll() ([]File, error) {
	var f []File
	Db.Table("file").Find(&f)
	return f, nil
}

func FileUpload(f *File) error {
	if err := Db.Table("file").Create(f).Error; err != nil {
		//fmt.Println(err)
		return errors.New("File upload error :" + err.Error())
	}
	return nil
}

func DeleteFile(id int64) error {
	if err := Db.Table("file").Where("id=?", id).Update("deleted_at", time.Now()).Error; err != nil {
		return errors.New("file delete error: " + err.Error())
	}
	return nil
}

func UpdateDeleteFiles(id int64) error {
	if err := Db.Table("file").Where("id=?", id).Update("deleted_at", "").Error; err != nil {
		return errors.New("file delete error: " + err.Error())
	}
	return nil
}

func DeleteFiles(id []int64) error {
	if err := Db.Table("file").Where("in ?", id).Update("deleted_at", time.Now()).Error; err != nil {
		return errors.New("file delete error: " + err.Error())
	}
	return nil
}

// CheckVipStore 检车 库存
func CheckVipStore(id int64) (int64, error) {
	var store VipStore
	if err := Db.Table("vip_store").Where("vip_=id?", id).First(&store).Error; err != nil {
		return 0, err
	}
	return store.Store, nil
}

func Create(o *Order, orderNo string) (Order, error) {
	//开启事务
	tx := Db.Begin()
	res := tx.Table("order").Create(o)
	if res.Error != nil {
		//logs.Info(res.Error)
		//回滚
		tx.Rollback()
		return Order{}, errors.New("创建失败")
	}

	var orderResp Order
	err := tx.Table("order").Where("order_no =?", orderNo).First(&orderResp).Error
	if err != nil {
		tx.Rollback()
		return Order{}, errors.New("查询失败")
	}
	//提交
	tx.Commit()
	return orderResp, nil
}

func GetUserInfo(id string) (User, error) {
	var u User
	if err := Db.Table("user").Where("id=?", id).First(&u).Error; err != nil {

		return User{}, err
	}
	return u, nil
}

func UserBalance(id int64, balance string) error {
	if err := Db.Table("user").Where("id=?", id).Update("user_balance", balance).Error; err != nil {
		return err
	}

	return nil
}

func UpdateStatus(orderNo string) error {
	fmt.Println(orderNo)
	res := Db.Table("order").Where("order_no =?", orderNo).Update("status", 1)
	if res.Error != nil {
		fmt.Println(res.Error)
		return errors.New("修改失败")
	}
	//var orderResp Order
	//Db.Table("order").Where("order_no =?", orderNo).First(orderResp)
	return nil
}

func UserIntegral(id int64, balance string) error {
	if err := Db.Table("user").Where("id=?", id).Update("user_integral", balance).Error; err != nil {
		return err
	}

	return nil
}

func GetUserModelsVipInfo(id int64) ([]Vip, error) {
	var v []Vip
	if err := Db.Table("vip").Where("user_id=?", id).Find(&v).Error; err != nil {
		return nil, err
	}
	return v, nil
}

func UpdateStatusVipCard(idCard string) error {
	if err := Db.Table("vip_card").Where("vip_card=?", idCard).Update("card_status", 1).Error; err != nil {
		return err
	}
	return nil
}

func CreateVip(u *Vip) error {
	if err := Db.Table("vip").Create(u).Error; err != nil {
		return err
	}
	return nil
}

func CheckStatusVipCard(idCard string) error {
	var v VipCard
	if err := Db.Table("vip_card").Where("vip_card=?", idCard).First(&v).Error; err != nil {
		return err
	}
	if v.CardStatus == 1 {
		return errors.New("该兑换码已被兑换")
	}

	return nil
}
